package park.borne;


import java.util.*;

public final class ScanThread implements Runnable
{
    private static final int TIME = 40;
    private Thread myThread;
    private Vector listeners;
    private int listenersCount;
    private volatile boolean isRunning;
    private volatile int time = TIME;

    public ScanThread()
    {
	listeners = new Vector();
    }

    public final void start()
    {
       isRunning = true;
       myThread = new Thread(this);
       myThread.setPriority(8);
       myThread.start();
    }

    public final void stop()
    {
      isRunning = false;
      if (myThread != null) while( myThread.isAlive()) {}
    }

    public void setTimer(int time)
    {
      this.time = time;
    }
    public int getTimer()
    {
      return time;
    }

    public final void run()
    {
	Thread me = Thread.currentThread();
	int count = listenersCount;
	//utilisation d'un tableau plutot qu'un vecteur
	//pour gagner du temps (pas de synchronisation)
	Object[] liste = new Object[count];
	for (int i = 0; i < count; i++)
	{
	     liste[i] = listeners.elementAt(i);
	}

	while(isRunning)
	{

	   for (int i = 0; i < count; i++)
	   {
	     ((ScanListener) liste[i]).doScan();
	   }
	   try
	   {
	     me.sleep(time);
	   }
	     catch(InterruptedException e) {}
	}
	System.out.println("fin du thread ScanThread");
    }

     public void addToScan(ScanListener e)
    {
      if (!listeners.contains(e) & !isRunning)
      {
	listeners.addElement(e);
	listenersCount = listeners.size();
      }
    }

    public void removeToScan(ScanListener e)
    {
      if (listeners.contains(e) & !isRunning)
      {
	listeners.removeElement(e);
	listenersCount = listeners.size();
      }
    }

}
